package com.feifan.main.util;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

/**
 * @program: GetRegBag
 * @author: Xiaofan
 * @createTime: 2021-07-12 08:45
 * @description: Functions of this class is 产生红包的算法-二倍均值法
 **/
public class RedPacketUtil {
    public static List<Integer> divideRedPacket(Integer totalAmount,Integer totalPersonNum){
        //建立一个存储每次生成红包的随机金额，金额单位为分
        List<Integer> amountList=new ArrayList<>();
        //开始判断总金额和总人数的合法性
        if(totalAmount>0&&totalPersonNum>0){
            //记录剩余的总人数于总金额
            Integer restAmount=totalAmount;
            Integer restPersonNum=totalPersonNum;
            //生成随机数
            Random random=new Random();
            for(int i=0;i<totalPersonNum-1;i++){//-1是因为到最后一个人的时候就不用再算了
                //随机范围为：[1,剩余金额的二倍)
                int amount=random.nextInt(restAmount/restPersonNum*2-1)+1;//-1意义与上面一致，+1是为了控制随即金额是从1开始的
                restAmount-=amount;//总金额减去生成的随即金额
                restPersonNum--;//总人数减一
                //将每次生成的随机金额的红包放入到集合中
                amountList.add(amount);
            }
            amountList.add(restAmount);//剩余最后一笔金额即为最后一个红包，也要加进去
        }
        return amountList;
    }
}